#include <stdio.h>

/**
 * 计算两个整数的最大公约数（复刻Python逻辑）
 * @param m: 第一个整数
 * @param n: 第二个整数
 * @return: m和n的最大公约数
 */
int gcd(int m, int n) {
    // 若m < n，用异或交换m和n（与Python的异或交换逻辑一致）
    if (m < n) {
        m ^= n;
        n ^= m;
        m ^= n;
    }

    // 欧几里得算法核心：循环取余直到余数为0
    while (m % n != 0) {
        int r = m % n;
        m = n;
        n = r;
    }

    return n;
}

// 测试主函数
int main() {
    // 测试用例（覆盖常见场景：正整数、一正一负、含0、相同数、质数）
    int test_cases[][2] = {
        {100, 60},    // 常见场景：gcd(100,60)=20
        {60, 100},    // m < n 场景（需交换）：结果同上
        {7, 5},       // 质数场景：gcd(7,5)=1
        {25, 25},     // 相同数场景：gcd(25,25)=25
        {123, 456},   // 多位数场景：gcd(123,456)=3
        {-100, 60},   // 负整数场景：gcd(-100,60)=20（C中负号不影响取余结果）
        {100, -60}    // 负整数场景：gcd(100,-60)=20
    };

    int case_count = sizeof(test_cases) / sizeof(test_cases[0]);
    for (int i = 0; i < case_count; i++) {
        int m = test_cases[i][0];
        int n = test_cases[i][1];
        int result = gcd(m, n);
        printf("gcd(%d, %d) = %d\n", m, n, result);
    }

    return 0;
}